#include "VentanaDialogo.h"
#include <gtkmm/menuitem.h>


VentanaDialogo::VentanaDialogo(Glib::RefPtr<Gtk::Builder> b, std::string nomWidget, std::string nomMenuItem, Gtk::Window& parentWin)
{
	// Guarda una referencia al builder para usarlo cuando sea necesario
	this->_builder = b;

	// Obtiene la ventana de dialogo desde el builder
	this->_pVentana = 0;
	this->_builder->get_widget(nomWidget, this->_pVentana);

	if (!this->_pVentana) throw std::runtime_error("Error, no se encontró '"+ nomWidget);

	// Conecta el cuadro de dialogo al menuItem correspondiente
	Gtk::MenuItem* pMenuItem = 0;
	this->_builder->get_widget(nomMenuItem, pMenuItem);
	
	if (!pMenuItem) throw std::runtime_error("Error, no se encontró '"+ nomMenuItem);

	pMenuItem->signal_activate().connect( sigc::mem_fun(*this, &VentanaDialogo::abrirDialogo) );

	// Setea al padre de la ventana
	this->_pVentana->set_transient_for(parentWin);
}


VentanaDialogo::~VentanaDialogo(){
}


// Abre al dialogo asociado a esta ventana de dialogo
void VentanaDialogo::abrirDialogo(){
	// Si existen parametros cargados los pasa a la ventana
	if (*this->_ppconfig != NULL){
		setearParametros();
		this->_pVentana->set_response_sensitive(0, true);
	} else {
		this->_pVentana->set_response_sensitive(0, false);
	}

	// Muestra la ventana y espera hasta que el usuario active
	// uno de los botones de accion
	int resul = this->_pVentana->run();

	// Oculta la ventana
	this->_pVentana->hide();

	// El "resul" señala que btn fue presionado
	if (resul == 0) aceptar();
	else cancelar();
}


void VentanaDialogo::setDataSource(Configuraciones** cfg){
	this->_ppconfig = cfg;
}


